Entity Framework (EF) তে Stored Procedure ব্যবহার করা একটি অত্যন্ত কার্যকরী পদ্ধতি, যার মাধ্যমে আপনি ডেটাবেস অপারেশনগুলি আরো দ্রুত এবং নিরাপদে পরিচালনা করতে পারেন। EF তে Stored Procedure ব্যবহার করার জন্য কিছু নির্দিষ্ট কৌশল রয়েছে, যা আপনার কোডে Raw SQL কুয়েরি বা Stored Procedure ব্যবহার করার জন্য সহায়তা করে। EF 6 এবং EF Core উভয়ই Stored Procedure এর সমর্থন দেয়, তবে EF Core এ কিছু নতুন ফিচার এবং সুবিধা রয়েছে যা Stored Procedure ব্যবস্থাপনা আরো সহজ এবং শক্তিশালী করে।
EF এর মাধ্যমে Stored Procedure কল করার জন্য মূলত দুইটি পদ্ধতি ব্যবহার করা হয়:
এগুলো ছাড়াও EF 7+ এ কিছু নতুন ফিচার যেমন ExecuteSqlInterpolated এবং FromSqlInterpolated যুক্ত করা হয়েছে।
FromSqlRaw মেথড ব্যবহার করে আপনি Stored Procedure থেকে ডেটা রিটার্ন করতে পারেন এবং সেই ডেটা আপনার Entity মডেল দিয়ে ম্যাপ করতে পারেন।
ধরা যাক, আপনার ডেটাবেসে একটি Stored Procedure রয়েছে যা একটি নির্দিষ্ট বয়সের ছাত্রদের তথ্য রিটার্ন করে:
CREATE PROCEDURE GetStudentsByAge
@age INT
AS
BEGIN
SELECT * FROM Students WHERE Age = @age;
END
এখন, EF এর মাধ্যমে এই Stored Procedure কল করে আমরা ডেটা রিটার্ন করতে পারি:
using (var context = new SchoolContext())
{
var age = 20;
// Stored Procedure থেকে ডেটা রিটার্ন করা
var students = context.Students
.FromSqlRaw("EXEC GetStudentsByAge @age",
new SqlParameter("@age", age))
.ToList();
foreach (var student in students)
{
Console.WriteLine($"{student.Name}, {student.Age}");
}
}
এখানে:
FromSqlRaw
: এটি Raw SQL কুয়েরি বা Stored Procedure কল করতে ব্যবহৃত হয়।SqlParameter
: প্যারামিটার ব্যবহার করে SQL কুয়েরির ইনপুট ডেটা সুরক্ষিতভাবে পাস করা হয়।এভাবে EF আপনার Students
Entity ক্লাসের সাথে রিটার্ন হওয়া ডেটা ম্যাপ করে এবং ডেটাবেস থেকে প্রয়োজনীয় তথ্য রিটার্ন করে।
ExecuteSqlRaw মেথড দিয়ে আপনি Stored Procedure কল করে ডেটাবেসে INSERT, UPDATE অথবা DELETE অপারেশন করতে পারেন। এই মেথডটি সাধারণত কোনো ডেটা রিটার্ন না করার সময় ব্যবহৃত হয়, যেমন যখন আপনি ডেটাবেসে কোনো রেকর্ড ইনসার্ট করতে চান।
ধরা যাক, আপনার ডেটাবেসে একটি Stored Procedure রয়েছে যা একটি নতুন ছাত্র যোগ করে:
CREATE PROCEDURE AddStudent
@name NVARCHAR(100),
@age INT,
@address NVARCHAR(200)
AS
BEGIN
INSERT INTO Students (Name, Age, Address)
VALUES (@name, @age, @address);
END
এখন, আপনি EF এর মাধ্যমে এই Stored Procedure কল করতে পারেন:
using (var context = new SchoolContext())
{
var name = "John Doe";
var age = 22;
var address = "123 Main St";
// Stored Procedure কল করে ডেটাবেসে ইনসার্ট করা
context.Database.ExecuteSqlRaw("EXEC AddStudent @name, @age, @address",
new SqlParameter("@name", name),
new SqlParameter("@age", age),
new SqlParameter("@address", address));
}
এখানে:
ExecuteSqlRaw
: এটি Raw SQL বা Stored Procedure এক্সিকিউট করতে ব্যবহৃত হয়। এটি কোনো রিটার্ন ভ্যালু দেয় না, কিন্তু এটি ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করে এবং ডেটা আপডেট, ইনসার্ট বা ডিলিট করে।যখন আপনি Stored Procedure থেকে ডেটা রিটার্ন করেন, EF স্বয়ংক্রিয়ভাবে আউটপুটকে Entity ক্লাসের সাথে ম্যাপ করে। তবে, আপনি যদি আউটপুটের জন্য একটি কাস্টম মডেল বা ডেটা ক্লাস ব্যবহার করতে চান, তবে EF তে আপনার আউটপুটকে সেই মডেলটির সাথে ম্যাপ করা যেতে পারে।
ধরা যাক, আপনার একটি StudentDTO
ক্লাস আছে যেটি Student
Entity এর কিছু নির্দিষ্ট ফিল্ড নিয়ে তৈরি।
public class StudentDTO
{
public string Name { get; set; }
public int Age { get; set; }
}
using (var context = new SchoolContext())
{
var age = 20;
// FromSqlRaw দিয়ে কাস্টম DTO ব্যবহার করা
var students = context.Set<StudentDTO>()
.FromSqlRaw("EXEC GetStudentsByAge @age",
new SqlParameter("@age", age))
.ToList();
foreach (var student in students)
{
Console.WriteLine($"{student.Name}, {student.Age}");
}
}
এখানে:
context.Set<StudentDTO>()
: StudentDTO
ক্লাসকে Entity হিসেবে ব্যবহার করা হচ্ছে।FromSqlRaw
: এটি Stored Procedure থেকে ডেটা রিটার্ন করে এবং StudentDTO
ক্লাসে ম্যাপ করে।EF Core তে Stored Procedure ব্যবহার করার জন্য আপনাকে ExecuteSqlRaw বা FromSqlRaw ব্যবহার করতে হয়। EF Core 7 এবং তার পরবর্তী সংস্করণে কিছু নতুন ফিচার যুক্ত হয়েছে, যেমন ExecuteSqlInterpolated এবং FromSqlInterpolated, যা প্যারামিটারাইজড কুয়েরি লেখাকে আরও নিরাপদ করে তোলে। এই নতুন ফিচারের সাহায্যে SQL ইনজেকশন থেকে রক্ষা পাওয়া যায়।
context.Database.ExecuteSqlInterpolated($"EXEC AddStudent {name}, {age}, {address}");
এখানে:
এইভাবে, EF তে Stored Procedure ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং সিকিউরিটি উন্নত করতে পারবেন।
common.read_more